<?php
/**************************************************************************************************
访问数据库基本类
Version:			3.0
@lastupdate			2006-10-20
**************************************************************************************************/
class WMysql extends Notify 
{
	private $querynum	= 0;
	private $debug		= 0;
	private $Notify		= true;
	/**********************************************************************************************
	Function		Construct
	parameters		$dbhost			数据库服务名称或IP
					$dbuser			访问数据库用户名
					$dbpass			访问数据库对应密码
	**********************************************************************************************/
	function WMysql($dbhost, $dbuser, $dbpass,$debug=0,$Notify = true) 
	{
		$this->debug	= $debug;
		$this->Notify	= $Notify;
		if(!@mysql_connect($dbhost, $dbuser, $dbpass)) 
		{
			if($this->debug)
				$msg = mysql_error();
			else
				$msg = 'Can not connect to MySQL server';
			if($this->Notify)
				$this->halt($msg,1);
			else 
				throw new Exception($msg);
		}
		if($this->version() > '4.1')
		{
			$serverset = "character_set_connection='utf8',character_set_results='utf8',character_set_client=binary";
			//防止数据太大而溢出产生错误提示，设置自动切断
			$serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',')." sql_mode='' ") : '';
			mysql_query("SET $serverset");
		}
	}
	function version()
	{
		return mysql_get_server_info();
	}
	/**********************************************************************************************
	Function		选择表
	parameters		$dbname			表明
	**********************************************************************************************/
	function select_db($dbname) 
	{
		return mysql_select_db($dbname);
	}
	/**********************************************************************************************
	Function		从结果集中取得一行作为关联数组，或数字数组
	parameters		$query			结果集
					$result_type	MYSQL_ASSOC		关联数组
									MYSQL_NUM		数字数组
									MYSQL_BOTH		二者兼有
	**********************************************************************************************/
	function fetch_array($query, $result_type = MYSQL_ASSOC)
	{
		return mysql_fetch_array($query, $result_type);
	}
	/**********************************************************************************************
	Function		
	parameters		
	**********************************************************************************************/
	function query($sql) 
	{
		$msg	= "";
		if(!($query = mysql_query($sql)))
		{
			$error_num = mysql_errno();
			if($error_num == 1062)
			{
				$msg = mysql_error();
				$msg = ereg_replace("(.[^']*)'(.*)'(.*)","\\2",$msg );
				$msg = "信息不可以重复，$msg 已经存在。";
			}
			else 
			{
				if($this->debug)
					$msg = $sql.mysql_error();
				else
					$msg = 'MySQL Query Error';
			}
			if($this->Notify)
			{
				if(isset($_SERVER["HTTP_REFERER"]) && $_SERVER["HTTP_REFERER"] != "")
					$url	= $_SERVER["HTTP_REFERER"];
				else 
					$url	= "/";
				$this->halt($msg,$url);
			}
			else 
				throw new Exception($msg);
		}
		//$this->querynum++;
		return $query;
	}
	/**********************************************************************************************
	Function		返回影响行
	parameters		
	**********************************************************************************************/
	function affected_rows() 
	{
		return mysql_affected_rows();
	}
	/**********************************************************************************************
	Function		返回错误信息
	parameters		
	**********************************************************************************************/
	function error() 
	{
		return mysql_error();
	}
	/**********************************************************************************************
	Function		返回错误编码
	parameters		
	**********************************************************************************************/
	function errno() 
	{
		return intval(mysql_errno());
	}
	/**********************************************************************************************
	Function		取得结果集中指定行指定列内容
	parameters		$query			结果集
					$row			行数
					$field			列数
	**********************************************************************************************/
	function result($query, $row ,$field = 0) {
		$query = @mysql_result($query, $row ,$field);
		return $query;
	}
	/**********************************************************************************************
	Function		取得结果集中行的数目
	parameters		$query			结果集
	**********************************************************************************************/
	function num_rows($query) 
	{
		$query = mysql_num_rows($query);
		return $query;
	}
	/**********************************************************************************************
	Function		取得结果集中字段的数目
	parameters		$query			结果集
	**********************************************************************************************/
	function num_fields($query) 
	{
		return mysql_num_fields($query);
	}
	/**********************************************************************************************
	Function		释放结果内存
	parameters		$query			结果集
	**********************************************************************************************/
	function free_result($query) 
	{
		return mysql_free_result($query);
	}
	/**********************************************************************************************
	Function		取得上一步 INSERT 操作产生的 ID 
	parameters		
	**********************************************************************************************/
	function insert_id() 
	{
		$id = mysql_insert_id();
		return $id;
	}
	/**********************************************************************************************
	Function		结果集中取得一行作为枚举数组
	parameters			
	**********************************************************************************************/
	function fetch_row($query) 
	{
		$query = mysql_fetch_row($query);
		return $query;
	}
	/**********************************************************************************************
	Function		关闭数据连接
	parameters		
	**********************************************************************************************/
	function close() 
	{
		return mysql_close();
	}
	/**********************************************************************************************
	Function		返回存储数据的数组集合
	parameters		$sql			待执行的SQL
					$result_type	MYSQL_ASSOC		关联数组
									MYSQL_NUM		数字数组
									MYSQL_BOTH		二者兼有
	**********************************************************************************************/
	function query_row($sql,$result_type = MYSQL_BOTH)
	{
		$row = Array();
		if(($query = mysql_query($sql))==true)
		{
			while(($result = mysql_fetch_array($query,$result_type))==true)
				array_push($row,$result);
		}
		else
		{
			if($this->debug)
				$msg = $sql.mysql_error();
			else
				$msg = 'MySQL Query Error';
			if($this->Notify)
				$this->halt($msg,1);
			else 
				throw new Exception($msg);
		}
		return $row;
	}
	function Query_Value($sql)
	{
		$retval = "";
		if(($query = mysql_query($sql))==true)
		{
			if(($row = mysql_fetch_array($query,MYSQL_NUM))==true)
				$retval = $row[0];
		}
		else
		{
			if($this->debug)
				$msg = $sql.mysql_error();
			else
				$msg = 'MySQL Query Error';
			if($this->Notify)
				$this->halt($msg,1);
			else 
				throw new Exception($msg);
		}
		return $retval;
	}
	function get_one($sql, $type = '')
	{
		$query = $this->query($sql, $type);
		$rs = $this->fetch_array($query);
		$this->free_result($query);
		return $rs ;
	}
}

?>